
'''Skript zum Vertauschen der Spalten und Zeilen einer Matrix.
'''
'''
In diesem Skript werden mittels drei Funktionen eine Liste
aus einer .csv Datei importiert, bearbeitet und als eine neue Liste
ausgegeben, in welcher die Werte der Zeilen und Spalten der
ursprünglichen Liste vertauscht sind. Im Anschluss werden für beide
Matrizen die Zeilen- und Spaltensummen erstellt und erneut ausgegeben.
'''
#_______________________________________________________________________________________
import csv
Matrix = open("Matrix.csv")
Inhalt = csv.reader(Matrix, delimiter=";", quoting=csv.QUOTE_NONNUMERIC)
Liste_2D = []
Liste_2D_zwischen = []
Liste_2D_final = []
# Dieser Block importiert alle wichtigen Funktionen, generiert die
# benötigten Listen und lädt die Datei "Matrix.csv" in Python
#_______________________________________________________________________________________

def listeschreiben(Inhalt):                                 
    for Zeile in Inhalt:
        Liste_2D.append(Zeile)
        
    return Liste_2D
# Diese Funktion konvertiert die .csv-Datei in eine Liste, um anschließend
# weitere Bearbeitungen durchführen zu können.
#_______________________________________________________________________________________

def austauscher(Liste_2D):
    Liste_2D_neu = []
    for z in range(0, len(Liste_2D[0])):
        for y in range(0, len(Liste_2D)):
            for x in range(0, len(Liste_2D[0])):
                Liste_2D_neu.insert (0, (Liste_2D[y])[x])
            Liste_2D_zwischen.append (Liste_2D_neu[z])

    return Liste_2D_zwischen
# In dieser Funktion werden alle Werte aus den jeweiligen Spalten
# hintereinander in eine neue "Zwischenliste" geschrieben (beginnend beim
# letzten Wert), damit die nachfolgende Funktion einfacher die finale
# Liste generieren kann, in der die Spalten und Zeilen vertauscht sind.
#_______________________________________________________________________________________

def neuschreiben(Liste_2D_zwischen):
    n = 0
    m = len(Liste_2D)
    for k in range(0, len(Liste_2D[0])):
        Liste_2D_final.insert (0, Liste_2D_zwischen[n:m])
        n = m
        m = m + len(Liste_2D)
        
    return Liste_2D_final
# Diese Funktion schreibt die finale Liste und bringt sie in die passende
# Form, damit sie als getauschte Matrix ausgegeben werden kann.
#_______________________________________________________________________________________

listeschreiben(Inhalt)
austauscher(Liste_2D)
neuschreiben(Liste_2D_zwischen)
# Funktionen werden ausgeführt.

print "Ursprüngliche Matrix:"
print " "
for p in range(0, len(Liste_2D)):
    print Liste_2D[p]
print " "
print " "
print "Getauschte Matrix:"
print " "
for p in range(0, len(Liste_2D[0])):
    print Liste_2D_final[p]
print " "
print " "
# In diesem Abschnitt werden die Ergebnisse ausgegeben.
#_______________________________________________________________________________________

NeueMatrix = open("Matrix_getauscht.csv", "wb")
writer = csv.writer(NeueMatrix, delimiter=";")
writer.writerows(Liste_2D_final)
print '"Matrix_getauscht.csv" wurde geschrieben.'
# Dieser Block erstellt eine neue .csv-Datei mit dem Namen "Matrix_getauscht".
#_______________________________________________________________________________________
#_______________________________________________________________________________________
print " "
print " "
print " "
'''
2.ter Teil, Berechnung der Zeilen und Spaltensummen der ursprünglichen und
getauschten Matrix
'''
#_______________________________________________________________________________________

ZeilSumListe_2D = []
SpaltSumListe_2D = []
ZeilSumListe_2D_final = []
SpaltSumListe_2D_final = []
#Definieren der benötigten Listen
#_______________________________________________________________________________________

def zeilensumme1(Liste_2D):
    x = 0
    for l in range(0, len(Liste_2D)):
        for i in range(0, len(Liste_2D[0])):
            x = x + (Liste_2D[l])[i]
        ZeilSumListe_2D.append (x)
        x = 0
    return ZeilSumListe_2D
# Diese Funktion berechnet die Zeilensumme der ursprünglichen Matrix
#

def spaltensumme1(Liste_2D):
    x = 0
    for l in range(0, len(Liste_2D[0])):
        for i in range(0, len(Liste_2D)):
            x = x + (Liste_2D[i])[l]
        SpaltSumListe_2D.append (x)
        x = 0
    return SpaltSumListe_2D
# Diese Funktion berechnet die Spaltensumme der ursprünglichen Matrix
#

def zeilensumme2(Liste_2D_final):
    x = 0
    for l in range(0, len(Liste_2D_final)):
        for i in range(0, len(Liste_2D_final[0])):
            x = x + (Liste_2D_final[l])[i]
        ZeilSumListe_2D_final.append (x)
        x = 0
    return ZeilSumListe_2D_final
# Diese Funktion berechnet die Zeilensumme der getauschten Matrix
#

def spaltensumme2(Liste_2D_final):
    x = 0
    for l in range(0, len(Liste_2D_final[0])):
        for i in range(0, len(Liste_2D_final)):
            x = x + (Liste_2D_final[i])[l]
        SpaltSumListe_2D_final.append (x)
        x = 0
    return SpaltSumListe_2D_final
# Diese Funktion berechnet die Spaltensumme der getauschten Matrix
#_______________________________________________________________________________________

def zeilenspaltenanfuegen1(ZeilSumListe_2D):
    for k in range(0, len(Liste_2D)):
        Liste_2D[k].append (ZeilSumListe_2D[k])
    Liste_2D.append (SpaltSumListe_2D)
    return Liste_2D
# Diese Funktion fügt der Matrix-Liste die Zeilen- & Spaltensummen hinzu
#
def zeilenspaltenanfuegen2(ZeilSumListe_2D_final):
    for k in range(0, len(Liste_2D_final)):
        Liste_2D_final[k].append (ZeilSumListe_2D_final[k])
    Liste_2D_final.append (SpaltSumListe_2D_final)
    return Liste_2D_final
# Diese Funktion fügt der getauschten Matrix-Liste die Zeilen - & Spaltensummen hinzu
#________________________________________________________________________________________

zeilensumme1(Liste_2D)
spaltensumme1(Liste_2D)
zeilensumme2(Liste_2D_final)
spaltensumme2(Liste_2D_final)
zeilenspaltenanfuegen1(ZeilSumListe_2D)
zeilenspaltenanfuegen2(ZeilSumListe_2D_final)
# Ausführen der Funktionen

print "Ursprüngliche Matrix mit Spalten- und Zeilensummen:"
print " "
for p in range(0, len(Liste_2D)):
    print Liste_2D[p]
print " "
print " "
print "Getauschte Matrix mit Spalten- und Zeilensummen:"
print " "
for p in range(0, len(Liste_2D[0])):
    print Liste_2D_final[p]
print " "
print " "
# Ausgabe der Ergebnisse
#________________________________________________________________________________________

NeueMatrix2 = open("Matrix_Zeilenspaltensummen.csv", "wb")
writer = csv.writer(NeueMatrix2, delimiter=";")
writer.writerows(Liste_2D) 

NeueMatrix3 = open("Matrix_getauscht_Zeilenspaltensummen.csv", "wb")
writer = csv.writer(NeueMatrix3, delimiter=";")
writer.writerows(Liste_2D_final)
print '"Matrix_Zeilenspaltensummen.csv" wurde geschrieben.'
print '"Matrix_getauscht_Zeilenspaltensummen.csv" wurde geschrieben.'
# Dieser Block erstellt eine neue .csv-Datei mit dem Namen "Matrix_Zeilenspaltensummen"
# und "Matrix_getauscht_Zeilenspaltensummen".


    
